// 
// Copyright 2010 Classpath Pty Ltd <opensource@classpath.com.au>
// 
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// 
//     http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// 

using build

**
** Tests the `CanExecuteSql` mixin.
**
internal class CanExecuteSqlTest : Test {

    **
    ** Stores an instance of `CanExecuteSql` for testing.
    **
    CanExecuteSql? canExecuteSql

    **
    ** Performs additional setup needed for `CanExecuteSqlTest`.
    **
    override Void setup() {
        super.setup()
        canExecuteSql = CanExecuteSqlTestClass()
    }

    **
    ** Cleans up additional setup needed for `CanExecuteSqlTest`.
    **
    override Void teardown() {
        super.teardown()
        canExecuteSql = null
    }

    **
    ** Tests the `CanExecuteSql.executeSql` method.
    **
    Void testExecuteSql() {
        sql := canExecuteSql.executeSql("sql_statement")
        verifyEq("sql_statement", sql.sql)
        verifyEq(1, canExecuteSql.modifications.size)
        verifyEq(sql, canExecuteSql.modifications[0])
    }

}

**
** Provides a simple implementation of `CanExecuteSql` for testing.
**
internal class CanExecuteSqlTestClass : CanExecuteSql {

    **
    ** Stores the list of [Modifications]`Modification` for testing.
    **
    override Modification[] modifications := [,]

}
